package com.virtualightning.mvvm.fragments

import com.virtualightning.mvvm.impl.adapter.InitAdapterProxy
import com.virtualightning.mvvm.impl.adapter.PreloadAdapterProxy

/**
 *  Anchor : Create by CimZzz
 *  Time : 2021/1/28 10:29:29
 *  Project : zxs-new
 *  异步 RecyclerView Fragment 基类
 */
abstract class AsyncRecyclerViewFragment : RecyclerViewFragment() {
    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/28 下午12:21
    // 默认在 Adapter 初始化完成之后进行首次刷新
    ///////////////////////////////////////////////////////////////////////////
    override fun afterAdapterInit() {
        refresh(false)
        adapter.requestPreload()
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/28 下午12:21
    // 加载错误页面显示，点击默认进行刷新操作
    ///////////////////////////////////////////////////////////////////////////
    override fun onErrorStateClick() {
        refresh(false)
    }

    ///////////////////////////////////////////////////////////////////////////
    // 代码分割线 on 2021/1/28 上午10:31 by CimZzz
    // 以下内容为:
    // 定义异步 RecyclerView 标准的生命周期和通用方法
    ///////////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/28 上午10:33
    // 刷新
    // isSilenceRefresh 表示是否进行静默刷新
    ///////////////////////////////////////////////////////////////////////////
    protected fun refresh(isSilenceRefresh: Boolean) {
        ensureAdapter {
            if(!isSilenceRefresh) {
                // 如果不是静默刷新，则会强制显示 Loading 页面
                showLoading()
            }
            onRefresh(adapter.requestInit(isSilenceRefresh))
        }
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/1/28 下午12:15
    // 处理刷新请求的回调
    // 默认从头开始进行刷新
    ///////////////////////////////////////////////////////////////////////////
    abstract fun onRefresh(adapterProxy: InitAdapterProxy)

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/11/17 2:54 下午
    // 需要显示加载页面时的操作
    ///////////////////////////////////////////////////////////////////////////
    protected open fun onNeedShowLoading() {
        showLoading()
    }

    ///////////////////////////////////////////////////////////////////////////
    // Add by CimZzz on 2021/2/2 下午4:44
    // 预加载数据
    ///////////////////////////////////////////////////////////////////////////
    override fun onAdapterPreload(proxy: PreloadAdapterProxy) {

    }
}